package ec.com.avila.hiperion.web.backings;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.model.SelectItem;

import ec.com.avila.emision.web.beans.DetalleCatalogoBean;
import ec.com.avila.hiperion.entities.Catalogo;
import ec.com.avila.hiperion.entities.DetalleCatalogo;
import ec.com.avila.hiperion.servicio.CatalogoService;
import ec.com.avila.hiperion.servicio.DetalleCatalogoService;

@ManagedBean
@ViewScoped
public class DetalleCatalogoBacking implements Serializable {

	private static final long serialVersionUID = 1L;

	@ManagedProperty(value = "#{detalleCatalogoBean}")
	private DetalleCatalogoBean detalleCatalogoBean;

	@EJB
	private CatalogoService catalogoService;
	@EJB
	private DetalleCatalogoService detalleCatalogoService;

	@SessionScoped
	private Catalogo catalogo;
	private DetalleCatalogo detalleCatalogo;
	private List<Catalogo> catalogos;
	private List<DetalleCatalogo> detallesCatalogo;
	private List<DetalleCatalogo> detallesCatalogoDep;

	private Boolean activarPanelDescripcionCatalgo;

	private List<SelectItem> catalogosItems;

	@PostConstruct
	void inicializar() {
		setCatalogos(catalogoService.consultarCatalogos());
		setActivarPanelDescripcionCatalgo(false);
	}

	/**
	 * 
	 * <b> Permite registrar un nuevo Catalogo. </b>
	 * <p>
	 * [Author: Dario Vinueza, Date: 12/12/2013]
	 * </p>
	 * 
	 */
	public void registrarCatalogo() {
		Catalogo catalogo = new Catalogo();
		catalogo.setDescripcion(detalleCatalogoBean.getDescripcionCatalogo());
		// Guarda el nuevo catalogo en la Base de Datos
		catalogoService.guardarCatalogo(catalogo);
		// Actualiza la lista de Catalogos
		setCatalogos(catalogoService.consultarCatalogos());
	}

	/**
	 * 
	 * <b> Permite registrar el Detalle de un Catalogo seleccionado. </b>
	 * <p>
	 * [Author: Dario Vinueza, Date: 13/12/2013]
	 * </p>
	 * 
	 */
	public void registrarDetalleCatalogo() {
		DetalleCatalogo detalle = new DetalleCatalogo();
		detalle.setCatalogo(catalogo);
		detalle.setCodDetalleCatalogo(detalleCatalogoBean.getCodDetalleCatalogo());
		detalle.setDescripcion(detalleCatalogoBean.getDescripcionDetalleCatalogo());
		// Guarda el nuevo detale de Catalogoen la Base de Datos
		detalleCatalogoService.guardarDetalleCatalogo(detalle);
		// Actualiza la lista de Catalogos
		setDetallesCatalogo(detalleCatalogoService.consultarDetalleCatalogoByCodCatalogo(getCatalogo().getIdCatalogo()));
	}

	public List<SelectItem> getCatalogosItems() {
		this.catalogosItems = new ArrayList<SelectItem>();
		List<Catalogo> catalogos = catalogoService.consultarCatalogos();

		for (Catalogo catalogo : catalogos) {
			SelectItem selectItem = new SelectItem(catalogo.getIdCatalogo(), catalogo.getDescripcion());
			catalogosItems.add(selectItem);
		}

		return catalogosItems;
	}

	public DetalleCatalogoBean getDetalleCatalogoBean() {
		return detalleCatalogoBean;
	}

	public void setDetalleCatalogoBean(DetalleCatalogoBean detalleCatalogoBean) {
		this.detalleCatalogoBean = detalleCatalogoBean;
	}

	public List<Catalogo> getCatalogos() {
		return catalogos;
	}

	public void setCatalogos(List<Catalogo> catalogos) {
		this.catalogos = catalogos;
	}

	public Catalogo getCatalogo() {
		if (catalogo != null)
			setDetallesCatalogo(detalleCatalogoService.consultarDetalleCatalogoByCodCatalogo(catalogo.getIdCatalogo()));
		return catalogo;
	}

	public void setCatalogo(Catalogo catalogo) {
		setActivarPanelDescripcionCatalgo(true);
		this.catalogo = catalogo;
	}

	public Boolean getActivarPanelDescripcionCatalgo() {
		return activarPanelDescripcionCatalgo;
	}

	public void setActivarPanelDescripcionCatalgo(Boolean activarPanelDescripcionCatalgo) {
		this.activarPanelDescripcionCatalgo = activarPanelDescripcionCatalgo;
	}

	public DetalleCatalogo getDetalleCatalogo() {
		if (detalleCatalogo != null) {
			this.setDetallesCatalogoDep(detalleCatalogoService.consultarDetalleCatalogoByDepCatalogo(this.getCatalogo()
					.getIdCatalogo().toString(), detalleCatalogo.getCodDetalleCatalogo()));
		}
		return detalleCatalogo;
	}

	public void setDetalleCatalogo(DetalleCatalogo detalleCatalogo) {
		this.detalleCatalogo = detalleCatalogo;
	}

	public List<DetalleCatalogo> getDetallesCatalogo() {
		return detallesCatalogo;
	}

	public void setDetallesCatalogo(List<DetalleCatalogo> detallesCatalogo) {
		this.detallesCatalogo = detallesCatalogo;
	}

	public List<DetalleCatalogo> getDetallesCatalogoDep() {
		return detallesCatalogoDep;
	}

	public void setDetallesCatalogoDep(List<DetalleCatalogo> detallesCatalogoDep) {
		this.detallesCatalogoDep = detallesCatalogoDep;
	}
}
